import { defineStore } from 'pinia'
// 第一个参数，唯一不可重复，字符串类型，作为仓库ID 以区分仓库 命名方式最好以 `use` 开头且以 `Store` 结尾
// 第二个参数，以对象形式配置仓库的state,getters,actions
export const useUserStore = defineStore('userStore', {
	// state 推荐箭头函数，为了TS类型推断
	state: () => ({
		num: 1,
		userInfo: [
			{ active: true, id: 1, name: '张三' },
			{
				active: true,
				id: 2,
				name: '李四'
			},
			{
				active: false,
				id: 3,
				name: '王武'
			}
		]
	}),
	getters: {
		doubleCount: (state) => state.num * 2,
		// 使用this取数据 返回类型**必须**明确设置
		doublePlusOne(): number {
			return this.doubleCount + 1
		},
		getActiveUserById(state) {
			//如果这里直接返回一个函数，就起不到缓存的作用了，可以在 getter 本身中缓存一些结果
			//做缓存
			const activeUsers = state.userInfo.filter((user) => user.active)
			return (userId: number) => activeUsers.find((user) => user.id === userId)
		}
	},
	//actions 即可同步也可异步 this就是store的实例
	actions: {
		addNum() {
			this.num++
		},
		delNum() {
			this.num--
		}
	},
	//配置缓存
	persist: {
		key: 'theme',
		storage: localStorage,
		//哪个数据需要持久化
		paths: ['num']
	}
})
export default useUserStore
